<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->
<title>VIM 中文帮助: 非英语语言支持</title>
<link rel="stylesheet" href="vim-stylesheet.css" type="text/css" />
<link rel="canonical" href="https://yianwillis.github.io/vimcdoc/doc/mlang.html" />
<script type="text/javascript" src="vimcdoc.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<nav id=banner>
<form action=tags.html target="tag_iframe">
  <input type="text" name="tag" id="tag" placeholder="标签搜索">
</form>
<iframe name="tag_iframe" src=""></iframe>
<a href="help.html">帮助总览</a> &middot;
<hr/>
<a href="quickref.html">快速参考</a> &middot;
<a href="index.html">命令索引</a> &middot;
<a href="eval.html#functions">函数列表</a> &middot;
<a href="quickref.html#option-list">选项列表</a> &middot;
<hr/>
<a href="usr_toc.html">用户手册</a> &middot;
<a href="help.html#reference_toc">参考手册</a> &middot;
</nav>

<header>
<h2>mlang</h2>
</header>
<article id=outer>
<section class=inner>
<b class="vimtag"> <a name="mlang.txt">mlang.txt</a> </b>     适用于 Vim 9.0 版本。   最近更新: 2023年2月


                  <code class="vim">VIM 参考手册    by Bram Moolenaar</code>
                <code class="vim">译者</code>: jwdu &lt;junweidu@ustc.edu&gt;、iCrazy &lt;icrazy@ustc.edu&gt;


多语言特性                                      <b class="vimtag"> <a name="multilang">multilang</a> </b> <b class="vimtag"> <a name="multi-lang">multi-lang</a> </b>

这里讲的是使用各种不同语言的信息和菜单。如果希望编辑多字节文本请参看
 <a href="mbyte.html#multibyte">multibyte</a> 。

基本的使用请参看用户手册  <a href="usr_45.html#usr_45.txt">usr_45.txt</a> 。

1. 信息                          <a href="mlang.html#multilang-messages">multilang-messages</a> 
2. 菜单                          <a href="mlang.html#multilang-menus">multilang-menus</a> 
3. 脚本                          <a href="mlang.html#multilang-scripts">multilang-scripts</a> 

同时请参看  <a href="helphelp.html#help-translated">help-translated</a>  阅读有关多语言帮助使用。

<code class="notvi">{仅当编译时加入  <a href="various.html#+multi_lang">+multi_lang</a>  特性才有效}</code>

</section><hr class="doubleline" /><section class=inner>
<h4>1. 信息                                                 <b class="vimtag"> <a name="multilang-messages">multilang-messages</a> </b></h4>
Vim 从环境变量中获取当前 locale 信息。这意味着在大部分的情形下，Vim 将使用你喜
欢的语言，除非这种语言不存在。

为了知道你的系统所支持的语言列表，可以查看以下的路径 (针对 Unix):
<code class="section">        /usr/lib/locale </code>
<code class="section">        /usr/share/locale </code>
不幸的是，大小写是区分的。同时还要<code class="note">注意</code> "-" 和 "_" 不要用混了。

(<code class="vim">译者注</code>: Windows 上，简体/繁体中文对应语言是 chinese_china 和 chinese_taiwan，
它们在内部被翻译为 zh_CN 和 zh_TW。换而言之，可以用 
<code class="example">        :language chinese_china " 不能直接用 zh_CN</code>
但 
<code class="example">        :echo v:lang</code>
<code class="example">        zh_CN</code>
这一翻译机制目前来自硬编码，因而看来没有 UTF-8 对应形式的支持。)

                                            <b class="vimtag"> <a name=":lan">:lan</a> </b> <b class="vimtag"> <a name=":lang">:lang</a> </b> <b class="vimtag"> <a name=":language">:language</a> </b> <b class="vimtag"> <a name="E197">E197</a> </b>
:lan[guage]
:lan[guage] mes[sages]
:lan[guage] cty[pe]
:lan[guage] tim[e]
:lan[guage] col[late]
                        显示当前的语言 (即 locale)。
                        使用 "messages" 参数，会显示用作消息的语言。术语:
                        LC_MESSAGES。
                        使用 "ctype" 参数，会显示用作字符编码的语言。术语:
                        LC_CTYPE。
                        使用 "time" 参数，会显示用作 strftime() 的语言。术语:
                        LC_TIME。
                        使用 "collate" 参数，会显示用作排序规则的语言。术语:
                        LC_COLLATE。
                        不加参数时显示当地语言的全称 (这个功能依赖于系统)。
                        当前的语言同样也可以通过变量  <a href="eval.html#v:lang">v:lang</a> 、 <a href="eval.html#v:ctype">v:ctype</a> 、
                         <a href="eval.html#v:collate">v:collate</a>  和  <a href="eval.html#v:lc_time">v:lc_time</a>  来获得。

:lan[guage] <code class="special">{name}</code>
:lan[guage] mes[sages] <code class="special">{name}</code>
:lan[guage] cty[pe] <code class="special">{name}</code>
:lan[guage] tim[e] <code class="special">{name}</code>
:lan[guage] col[late] <code class="special">{name}</code>
                        把当前的语言 (即 locale) 设置成 <code class="special">{name}</code>。
                        此处的 <code class="special">{name}</code> 必须是你系统上的一个有效的语言。一些系统
                        接受像 "en" 或 "en_US" 这样的别名，但是，一些系统只接
                        受像 "en_US.ISO_8859-1" 这样完整的名称。Unix 系统上可
                        以用以下命令查看支持的 locale: 
<code class="example">                                :!locale -a</code>
                        借助于参数 "messages"，你就可以设置消息使用的语言。如
                        果你希望的话，这两者可以不同，例如: 当你编辑日文文本时
                        使用英文消息。它设置 $LC_MESSAGES。
                        借助于参数 "ctype"，你就可以设置用作字符编码的语言。这
                        将会影响到 Vim 所连接的库。一般不能将它和 <a href="options.html#'encoding'">'encoding'</a>
                        设成不同的值，除非是 "C"。它设置 $LC_CTYPE。
                        借助于参数 "time" 参数，你就可以设置用作时间和日期消息
                        的语言。它影响到 strftime()。它设置 $LC_TIME。
                        借助于参数 "collate" 参数，你就可以设置用作排序规则的
                        语言。它影响到字符的排序。它设置 $LC_COLLATE。
                        没有参数时，以上都会被设置，另外还会设置 $LANG。
                        如有可能，LC_NUMERIC 值总会被设为 "C"，以便浮点数使用
                        '.' 作为十进制小数点。
                        这将会使那些依赖语言的项目 (信息，时间和日期的格式) 看
                        起来有一些不同。这不是所有系统都完全支持的。
                        如果设置失败，将会返回一个出错信息。如果设置成功，将不
                        会有任何信息。例如: 
<code class="example">                                :language</code>
<code class="example">                                Current language: C</code>
<code class="example">                                :language de_DE.ISO_8859-1</code>
<code class="example">                                :language mes</code>
<code class="example">                                Current messages language: de_DE.ISO_8859-1</code>
<code class="example">                                :lang mes en</code>


MS-WINDOWS 信 息 的 翻 译                               <b class="vimtag"> <a name="win32-gettext">win32-gettext</a> </b>

如果你用了自安装的 .exe 文件，应该不需要什么设置。否则你可能找不到
libintl.dll 文件。可以从下面的网站得到它:

        <a href="http://sourceforge.net/projects/gettext">http://sourceforge.net/projects/gettext</a>
或:
        <a href="https://mlocati.github.io/gettext-iconv-windows/">https://mlocati.github.io/gettext-iconv-windows/</a>

这里还包含了 xgettext，msgformat 以及其它工具。

libintl.dll 应该和 (g)vim.exe 放在同一个目录内，或者放在环境变量 PATH 指定的那
些目录之一。Vim 也会查找备用名 "libintl-8.dll" 和 "intl.dll"。

消息数据文件 (vim.mo) 应放在 "$VIMRUNTIME/lang/xx/LC_MESSAGES"，在这里 "xx" 是
语言的缩写 (多数是两个字母)。

如果你制作了自己的翻译，那么，你需要生成 .po 文件并把它转化为 .mo 文件。同时，
找到 Vim 的源代码并阅读 "src/po/README.txt" 文件。

如果你不想使用自动选择的语言，那么就把 $LANG 变量设为你希望的语言。如果你不希
望使用语言翻译，请设置成 "en"。 
<code class="example"></code>
<code class="example">  :let $LANG = 'ja'</code>
<code class="example"></code>
(Windows 的文本由 Muraoka Taro 完成)

</section><hr class="doubleline" /><section class=inner>
<h4>2. 菜单                                         <b class="vimtag"> <a name="multilang-menus">multilang-menus</a> </b></h4>
基本的使用请参看  <a href="usr_45.html#45.2">45.2</a> ，尤其是 <a href="options.html#'langmenu'">'langmenu'</a> 的使用部分。

<code class="note">注意</code> 如果在翻译后对菜单作了更改，菜单的一些选项可能会显示成英文。请联系翻译的
维护者并请求他更新菜单的翻译。你可以在 "$VIMRUNTIME/lang/menu_<code class="special">&lt;lang&gt;</code>.vim" 中找
到翻<code class="vim">译者</code>的名字和 e-mail 地址。

为菜单设定字体 (或字体集)，请用  <a href="syntax.html#:highlight">:highlight</a>  命令。例如: 
<code class="example"></code>
<code class="example">        :highlight Menu font=k12,r12</code>
<code class="example"></code>
<code class="example"></code>
LOCALE 的 别 名

不幸的是，即使使用相同的语言和编码，不同系统上的当地语言名称也可能是不同的。如
果你没有得到你需要的菜单翻译，请检查下面命令的输出: 
<code class="example"></code>
<code class="example">        echo v:lang</code>
<code class="example"></code>
现在，检查 "$VIMRUNTIME/lang" 目录中有没有使用相似语言的翻译文件。<code class="note">注意</code> 符号
"-" 和 "_" 的区别，它可能是找不到文件的罪魁祸首！另外一个通常要<code class="note">注意</code>的差别是
"iso8859-1" 和 "iso_8859-1"。所幸的是，Vim 把所有的名字都转换成小写了。因此，
你没有必要担心大小写的差别。为了避免空格被忘掉，它们被转化成下划线。

如果你发现了一个不同文件名的菜单翻译，你可以在自己的 runtime 目录下建立一个文
件并装载之。这个文件的名字可以是: 
<code class="example"></code>
<code class="example">        ~/.vim/lang/menu_&lt;v:lang&gt;.vim</code>
<code class="example"></code>
检查 <a href="options.html#'runtimepath'">'runtimepath'</a> 选项以确定会搜索哪些目录。在此文件中写一个命令来装载那个使
用不同名字的菜单文件: 
<code class="example"></code>
<code class="example">        runtime lang/menu_&lt;other_lang&gt;.vim</code>
<code class="example"></code>
<code class="example"></code>
翻 译 菜 单

如果你想自己翻译菜单，你可以使用  <a href="mlang.html#:menutrans">:menutrans</a>  命令，下面有一些说明。推荐把每种
语言的翻译放到单独的 Vim 脚本文件中。如果一种语言还没有被翻译，你可以成为它的
维护者，并把你的翻译贡献出来，以便能让其它 Vim 用户使用。如果你要这样的意愿的
话，请发 e-mail 给 Vim 的维护者: &lt;maintainer@vim.org&gt;。

                                        <b class="vimtag"> <a name=":menut">:menut</a> </b> <b class="vimtag"> <a name=":menutrans">:menutrans</a> </b> <b class="vimtag"> <a name=":menutranslate">:menutranslate</a> </b>
:menut[ranslate] clear
                        清除所有的菜单翻译。

:menut[ranslate] <code class="special">{english}</code> <code class="special">{mylang}</code>
                        将菜单名称 <code class="special">{english}</code> 翻译成 <code class="special">{mylang}</code>。像 "&amp;" 和
                        "<code class="special">&lt;Tab&gt;</code>" 这样的特殊字符也必须包括进去。如同其它  <a href="gui.html#:menu">:menu</a> 
                        命令中的那样，空格和句点需要用反斜杠来转义。
                        忽略 <code class="special">{english}</code> 中的大小写。

你可以在 $VIMRUNTIME/lang 目录中找到例子。

为了检验你的翻译，首先你需要清除所有的菜单。用下面的方法你可以不重新启动 Vim
就达到这样的效果: 
<code class="example">        :source $VIMRUNTIME/delmenu.vim</code>
<code class="example">        :source &lt;your-new-menu-file&gt;</code>
<code class="example">        :source $VIMRUNTIME/menu.vim</code>
<code class="example"></code>
菜单路径的每一个部分是被独立的翻译的。这就意味着: 如果 "Help" 被翻译成
"帮助"，"Overview" 被翻译成 "总览"，那么 "Help.Overview" 就会被翻译成
"帮助.总览"。

</section><hr class="doubleline" /><section class=inner>
<h4>3. 脚本                                                 <b class="vimtag"> <a name="multilang-scripts">multilang-scripts</a> </b></h4>
在 Vim 脚本中，你可以用  <a href="eval.html#v:lang">v:lang</a>  变量获得当前的 locale。缺省值是 "C" 或者来自
于环境变量 $LANG。

以下这个例子展示了这个变量的一个简单的应用，它可以显示出针对用户喜好语言的信
息: 
<code class="example"></code>
<code class="example">        :if v:lang =~ "zh_CN"</code>
<code class="example">        :  echo "早上好"</code>
<code class="example">        :else</code>
<code class="example">        :  echo "Good morning"</code>
<code class="example">        :endif</code>


 vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
</section>
</article>
<footer>
Generated by vim2html
</footer>
</body>
</html>
